#ifndef GHOST_H
#define GHOST_H

#include "queue.h"
#include "pacman.h"

// 幽灵类型枚举
typedef enum {
    GHOST_BLINKY,    // 红色幽灵：直接追踪
    GHOST_PINKY,     // 粉色幽灵：预判追踪
    GHOST_INKY,      // 蓝色幽灵：包夹战术
    GHOST_CLYDE     // 橙色幽灵：随机游走
} GhostType;

// 幽灵状态枚举
typedef enum {
    GHOST_STATE_NORMAL,     // 正常状态
    GHOST_STATE_FRIGHTENED, // 惊吓状态（Pacman吃到能量豆）
    GHOST_STATE_FROZEN,     // 冻结状态（技能树效果）
    GHOST_STATE_DEAD        // 死亡状态（返回出生点）
} GhostState;

// 路径节点结构体（用于BFS）
typedef struct {
    int row, col;           // 位置
    Direction dir;          // 到达该位置的方向
} PathNode;

// 幽灵结构体
typedef struct {
    GhostType type;         // 幽灵类型
    int row, col;           // 位置（网格坐标）
    float x, y;            // 位置（像素坐标）
    Direction dir;         // 当前方向
    float speed;          // 移动速度
    GhostState state;     // 当前状态
    float state_timer;    // 状态计时器
    int home_row;         // 出生点行
    int home_col;         // 出生点列
    Queue path;           // 路径队列（BFS结果）
} Ghost;

// 初始化与销毁
void ghost_init(Ghost* ghost, GhostType type, int home_row, int home_col);  // 初始化幽灵
void ghost_destroy(Ghost* ghost);                                           // 销毁幽灵

// AI与移动
void ghost_update(Ghost* ghost, Pacman* pacman, float dt);                 // 更新状态
void ghost_move(Ghost* ghost);                                            // 移动
void ghost_find_path(Ghost* ghost, Pacman* pacman);                       // 寻路（BFS）
Direction ghost_get_next_direction(Ghost* ghost, Pacman* pacman);         // 获取下一步方向

// 状态相关
void ghost_set_state(Ghost* ghost, GhostState state, float duration);     // 设置状态
void ghost_return_home(Ghost* ghost);                                     // 返回出生点
int ghost_is_frightened(Ghost* ghost);                                   // 是否处于惊吓状态
int ghost_is_frozen(Ghost* ghost);                                       // 是否处于冻结状态

// 碰撞检测
int ghost_collide_pacman(Ghost* ghost, Pacman* pacman);                  // 检测与Pacman的碰撞

// 绘制
void ghost_draw(Ghost* ghost);                                           // 绘制幽灵

#endif 